﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Domain
{
    public class EntidadBase<T> where T:class 
    {
    #region Propiedades.
        public virtual Repository<T> Repositorio { get; set; }
        public virtual String NombreEntidad { get; set; }
    #endregion
    #region Miembros Baicos. 

        public EntidadBase()
        {
            this.Repositorio = new Repository<T>();
        }
 
        /// <summary>
        /// Hace una grabado simple del objeto que se le pase por referencia. 
        /// Es decir, no hace ningun tipo de validación ni nada semejante, 
        /// por tal razón debe ser llamada desde la entidad. 
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public virtual Boolean Grabar(T entity) 
        {
            bool exito;
            exito = Repositorio.Save(ref entity);
            return exito;
        }

        public virtual Boolean BuscarUno(ref T entity, int value)
        {
            bool exito = false;
            entity = Repositorio.Get(value);
            exito = true;
            return exito;
        }

        public virtual Boolean BuscarTodos(ref IList<T> lista)
        {
            bool exito = false;
            lista = Repositorio.GetAll<T>();
            if (lista.Count > 0) { exito = true; }
            return exito;
        }

        public virtual Boolean BuscarAlgunos(String value, ref IList<T> lista)
        {
            bool exito = false;
            lista = Repositorio.Get(value);
            if (lista.Count > 0) { exito = true; }
            return exito;
        }

    #endregion
    }
}



